package com.ruoyi.ucar.controller;

import java.util.ArrayList;
import java.util.List;

import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.ucar.boreq.*;
import com.ruoyi.ucar.boresp.BrandPriceDetailBoResq;
import com.ruoyi.ucar.boresp.BrandPriceListBoResp;
import com.ruoyi.ucar.common.CommonVoResp;
import com.ruoyi.ucar.common.ResultEnum;
import com.ruoyi.ucar.domain.TBrandPrice;
import com.ruoyi.ucar.service.ITBrandPriceService;
import com.ruoyi.ucar.util.CommonUtil;
import com.ruoyi.ucar.util.ResponseUtil;
import com.ruoyi.ucar.voreq.*;
import com.ruoyi.ucar.voresp.*;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.poi.ExcelUtil;

/**
 * 车辆品牌价格Controller
 * 
 * @author ruoyi
 * @date 2025-07-02
 */
@Api(value = "车辆品牌价格管理",tags = "车辆品牌价格管理模块接口")
@RestController
@RequestMapping("/ucar/price")
public class TBrandPriceController extends BaseController
{

    @Autowired
    private   ITBrandPriceService tBrandPriceService;

    /**
     * 查询车辆品牌价格列表
     */
    @ApiOperation(value = "查询车辆品牌价格列表")
    @PreAuthorize("@ss.hasPermi('system:price:list')")
    @PostMapping("/list")
    public  CommonVoResp<BrandPriceListVoResp> list(@RequestBody BrandPriceListQueryVoReq brandPriceListQueryVoReq)
    {
        logger.info("查询车辆品牌价格列表查询VO端入口参数:{}",brandPriceListQueryVoReq);
        CommonVoResp<BrandPriceListVoResp> commonVoResp=new CommonVoResp<>();
        if(
                brandPriceListQueryVoReq.getPageIndex()==null||
                        brandPriceListQueryVoReq.getPageSize()==null){
            return CommonUtil.setCommonVoRespNoParam(commonVoResp);
        }
        BrandPriceListQueryBoReq brandPriceListQueryBoReq=CommonUtil.objToObj(brandPriceListQueryVoReq,BrandPriceListQueryBoReq.class);
        brandPriceListQueryBoReq.setPageIndex(brandPriceListQueryVoReq.getPageIndex());
        brandPriceListQueryBoReq.setPageSize(brandPriceListQueryVoReq.getPageSize());
        BrandPriceListBoResp brandPriceListBoResp=tBrandPriceService.brandPriceListQueryPage(brandPriceListQueryBoReq);
        if(StringUtils.isNotNull(brandPriceListBoResp)){
            BrandPriceListVoResp brandPriceListVoResp=new BrandPriceListVoResp();
            List<BrandPriceListVo> brandPriceListVos=new ArrayList<>();
            brandPriceListVoResp.setTotalCount(brandPriceListBoResp.getTotalCount());
            brandPriceListVoResp.setTotalPage(brandPriceListBoResp.getTotalPage());
            brandPriceListBoResp.getBrandPriceListBos().forEach(brandPriceListBo -> {
                BrandPriceListVo brandPriceListVo=CommonUtil.objToObj(brandPriceListBo,BrandPriceListVo.class);
                brandPriceListVos.add(brandPriceListVo);
            });
            brandPriceListVoResp.setBrandPriceListVos(brandPriceListVos);
            commonVoResp.setData(brandPriceListVoResp);
        }else{
            return CommonUtil.setCommonVoRespNoDataError(commonVoResp);
        }
        logger.info("查询车辆品牌价格列表查询出参：{}",commonVoResp);
        return commonVoResp;
    }

    /**
     * 导出车辆品牌价格列表
     */
    @PreAuthorize("@ss.hasPermi('system:price:export')")
    @Log(title = "车辆品牌价格", businessType = BusinessType.EXPORT)
    @PostMapping("/export")
    public void export(HttpServletResponse response, TBrandPrice tBrandPrice)
    {
        List<TBrandPrice> list = tBrandPriceService.selectTBrandPriceList(tBrandPrice);
        ExcelUtil<TBrandPrice> util = new ExcelUtil<>(TBrandPrice.class);
        util.exportExcel(response, list, "车辆品牌价格数据");
    }

    /**
     * 获取车辆品牌价格详细信息
     */
    @ApiOperation("获取车辆品牌价格详细信息接口-id和brandPriceUuid，两者传一即可")
    @PostMapping(value = "/detail")
    public CommonVoResp<BrandPriceDetailVoResq> getInfo(@RequestBody BrandPriceDetailQueryVoReq brandPriceDetailQueryVoReq)
    {
        CommonVoResp<BrandPriceDetailVoResq> commonVoResp=new CommonVoResp<>();
        logger.info("获取车辆品牌价格详细信息入参：{}",brandPriceDetailQueryVoReq);
        if(
                brandPriceDetailQueryVoReq.getBrandPriceUuid()==null&&
                        brandPriceDetailQueryVoReq.getId()==null){
            return CommonUtil.setCommonVoRespNoParam(commonVoResp);
        }
        BrandPriceDetailBoResq brandPriceDetailBoResq=tBrandPriceService.brandPriceDetailQuery(CommonUtil.objToObj(brandPriceDetailQueryVoReq, BrandPriceDetailQueryBoReq.class));

        if(StringUtils.isNull(brandPriceDetailBoResq)){
            return CommonUtil.setCommonVoRespNoDataError(commonVoResp);
        }else{
            BrandPriceDetailVoResq brandPriceDetailVoResq=CommonUtil.objToObj(brandPriceDetailBoResq,BrandPriceDetailVoResq.class);
            commonVoResp.setData(brandPriceDetailVoResq);
        }
        logger.info("获取车辆品牌价格详细信息出参：{}",commonVoResp);
        return commonVoResp;
    }

    @PreAuthorize("@ss.hasPermi('system:user:import')")
    @PostMapping("/importData")
    public AjaxResult importData(BrandPriceExclImportVoReq brandPriceExclImportVoReq) throws Exception
    {
        ExcelUtil<TBrandPrice> util = new ExcelUtil<TBrandPrice>(TBrandPrice.class);
        List<TBrandPrice> brandPriceListList = util.importExcel(brandPriceExclImportVoReq.getFile().getInputStream());
        String operName = getUsername();
        String message = tBrandPriceService.importBrandPrice(brandPriceListList, brandPriceExclImportVoReq.getIsUpdateSupport(), operName);
        return success(message);
    }


    @PostMapping("/importTemplate")
    public void importTemplate(HttpServletResponse response)
    {
        ExcelUtil<BrandPriceExclImportBoReq> util = new ExcelUtil<BrandPriceExclImportBoReq>(BrandPriceExclImportBoReq.class);
        util.importTemplateExcel(response, "车辆品牌价格数据");
    }


    /**
     * 新增车辆品牌价格
     */
    @ApiOperation(value = "新增车辆品牌价格")
    @PostMapping("/add")
    public CommonVoResp<BrandPriceAddVoResq> add(@RequestBody BrandPriceAddVoReq brandPriceAddVoReq)
    {
            CommonVoResp<BrandPriceAddVoResq> commonVoResp=new CommonVoResp<>();
            logger.info("新增车辆品牌价格入参：{}",brandPriceAddVoReq);
            BrandPriceAddVoResq brandPriceAddVoResq=new BrandPriceAddVoResq();
            if(tBrandPriceService.judgeTBrandPrice(brandPriceAddVoReq.getVehicleBrand(),brandPriceAddVoReq.getProductType())>0){
                commonVoResp.setCode(ResultEnum.BRANDPRICEEXITS.getCode());
                commonVoResp.setMessage(ResultEnum.BRANDPRICEEXITS.getMsg());
                return commonVoResp;
            }
            String brandPriceUuid = tBrandPriceService.saveTBrandPrice(brandPriceAddVoReq);
            tBrandPriceService.updateBrandPriceCache(brandPriceAddVoReq.getProductType());
            brandPriceAddVoResq.setBrandPriceUuid(brandPriceUuid);
            commonVoResp.setData(brandPriceAddVoResq);
            return commonVoResp;
    }

    /**
     * 修改车辆品牌价格
     */
    @ApiOperation(value = "修改车辆品牌价格")
    @PreAuthorize("@ss.hasPermi('system:price:edit')")
    @PostMapping("/udpate")
    public CommonVoResp<String> edit(@RequestBody BrandPriceUpdateVoReq brandPriceUpdateVoReq)
    {
        CommonVoResp<String> commonVoResp=new CommonVoResp<>();
        logger.info("修改车辆品牌价格入参：{}",brandPriceUpdateVoReq);
        int updateNumber=tBrandPriceService.updateTBrandPrice(brandPriceUpdateVoReq);
        tBrandPriceService.updateBrandPriceCache(brandPriceUpdateVoReq.getProductType());
        return ResponseUtil.commonUpdateResult(updateNumber,commonVoResp);
    }

    /**
     * 删除车辆品牌价格
     */
    @ApiOperation(value = "删除车辆品牌价格-id和brandPriceUuid，两者传一即可")
    @PreAuthorize("@ss.hasPermi('system:price:remove')")
    @PostMapping("/delete")
    public CommonVoResp<String> remove(@RequestBody BrandPriceDeleteVoReq brandPriceDeleteVoReq)
    {
        CommonVoResp<String> commonVoResp=new CommonVoResp<>();
        if(
                brandPriceDeleteVoReq.getBrandPriceUuid()==null&&
                        brandPriceDeleteVoReq.getId()==null){
            return CommonUtil.setCommonVoRespNoParam(commonVoResp);
        }
        logger.info("删除车辆品牌价格入参：{}",brandPriceDeleteVoReq);
        return ResponseUtil.commonDeleteResult(tBrandPriceService.deleteTBrandPriceById(brandPriceDeleteVoReq.getBrandPriceUuid(),brandPriceDeleteVoReq.getId()),commonVoResp);
    }
}
